package config.java;

/**
 * 解析配置的基类
 * @author liao
 *
 */
public abstract class ParseConfig {

	/**
	 * 默认的文件观察时间为60秒
	 */
	private final long DTIME = 60 * 1000;
	
	/**
	 * 解析配置文件
	 * @param alias 配置文件别名，如果有多个配置文件，可以对每个配置文件起别名，在取配置文件值时，直接以别名来取
	 * @param file 配置文件，包括文件路径
	 */
	protected abstract void parse(String alias,String file);
	
	/**
	 * 解析一个配置文件
	 * @param file 配置文件，包括文件路径
	 */
	public void parse(String file){
		parse("defAlias",file);
	}
	
	/**
	 * 解析配置文件，同时还会对配置文件进行监测，当发现配置文件有变化时，会载入最新的配置文件
	 * @param alias 别名，当有多个配置文件时，可对配置文件起别名
	 * @param file 配置文件名，包括文件路径
	 * @param delay 监测时长
	 */
	public void parseAndWatch(String alias,String file,long delay){
		ConfigWatch watch = new ConfigWatch(file,alias,delay);
		watch.start();
	}
	
	/**
	 * 解析配置文件，同时还会对配置文件进行测试，当发现配置文件有变化时，会载入最新的配置文件<br>
	 * 监测时长为60秒
	 * @param alias 配置文件的别名
	 * @param file 配置文件名，包括文件路径
	 */
	public void parseAndWatch(String alias,String file){
		parseAndWatch(alias,file,DTIME);
	}
	
	/**
	 * 解析配置文件，同时还会对配置文件进行测试，当发现配置文件有变化时，会载入最新的配置文件<br>
	 * 监测时长为60秒
	 * @param file 配置文件名，包括文件路径 
	 */
	public void parseAndWatch(String file){
		parseAndWatch("defAlias",file,DTIME);
	}
	
	class ConfigWatch extends FileWatchDog{

		protected ConfigWatch(String filename, String alias, long delay) {
			super(filename, alias, delay);
		}

		@Override
		protected void parseOnChange() {
			parse(alias,filename);
		}
		
	}
}
